#!/usr/bin/env python3
# _*_ coding : utf-8 _*_
import win32gui
import win32api
import win32con
import win32clipboard as w
import time
import random
import datetime
import threading

lis = [u'#签到', u'#打卡', u'#美滋滋']
lis11 = ['鱼子酱', '大酱汤', '炒乌冬', '乌冬面', '醋饭', '鲷鱼烧', '拉面', '海鲜汤', '牛尾汤', '橙醋蟹',
         '海胆汤', '炒牡蛎', '大阪烧', '春卷', '泡菜烧', '鸡肉串', '铜锣烧', '荞麦面', '鳗鱼饭', '苹果饼',
         '蒙多排骨', '奥恩汤', '薇恩豆腐', '炸发条', '安尼鱼', '佐伊饺子', '芮尔饼', '瑞兹煮', '扎克烧', '卡兹克锅', '璐璐烧麦', '五郎红肠', '叔又饿了',
         '奶酪饼', '阿富汗披萨', '玉子烧', '糖醋排骨', '明太鱼', '鳕鱼烧', '五花肉', '章鱼烧', '西京烧', '麻婆豆腐',
         '担担面', '里脊', '牛霖肉', '三文鱼', '酒蒸蛤蜊', '关东煮', '寿喜锅', '三明治', '蛋包饭', '牛肉饭', '石狩锅',
         '昆布', '海苔', '酱汁', '水饺', '饺子', '煎饺', '蒸饺', '酱油拌面', '牛油果', '牛腩', '牛肚', '牛肝', '鸡蛋烧',
         '鱿鱼汤', '鲤鱼汤', '乌贼面', '寿司', '冷面', '炒年糕', '安康鱼', '纳豆饭', '油泼面', '山葵盖饭', '蚬汤', '蚬子面',
         '生姜烧', '鳜鱼', '蒜蓉汤', '鲑鱼', '杏鲍菇', '鲍鱼', '味噌汤', '烤肉', '炸鸡块', '羊排', '番茄炒蛋', '肝盖饭',
         '信玄袋', '鲔鱼汤', '喜知次', '龙虾', '肉串', '鸡蛋卷', '大福', '牛筋', '梅子酒', '线鱼脊', '云吞面', '刺鲳鱼',
         '虾肉山芋', '汉堡肉', '番茄意面', '排骨面', '咖喱饭', '咖喱牛肉', '蕃茄豆腐', '秋刀鱼', '什锦面', '鱼生碎',
         '葱炒肉', '熏肠', '沙丁鱼', '什锦拌', '花蛤', '糯米饭', '鸡肉春卷', '炒培根', '红糟排骨', '黑炒饭', '麻辣汤',
         '竹荚鱼', '玉米饼', '腊肉', '爆羊肉', '绿麻豆腐', '烧虾仁', '鱼丸面', '煲仔饭', '肠炒面', '青花鱼', '横膈膜肉',
         '麻婆凉面', '肉汁乌冬', '奶油海鲜', '薄切牛肉', '炸火腿', '炸酱面', '乌鱼子', '银鲑', '咖喱炒面', '葱花蛋',
         '仁当牛', '鸡酱烧', '蕈菇海螺', '炖牛舌', '蟹面', '炒酱面', '烘肉卷', '鸡肉锅', '马头鱼', '方头鱼', '菌菇汤',
         '寿喜烧', '小圆', '甜点', '牛舌', '泡菜鱼', '牛肉煮', '盐渍鲭鱼意面', '虾仁', '海鲜饭', '牛肉饭', '鲣鱼']

semaphore = threading.Semaphore(0)


def time_count(interval=20):
    # t1 = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    t1 = datetime.datetime.now().strftime("%H:%M:%S")
    print('current time is [{}]'.format(t1))
    # t2 = (datetime.datetime.now()+datetime.timedelta(minutes=5)).strftime("%Y-%m-%d %H:%M:%S")
    t2 = (datetime.datetime.now() +
          datetime.timedelta(minutes=interval)).strftime("%H:%M:%S")
    print('\n[{}] woulde be incoming.'.format(t2))


def getContentFromClipboared(content="打卡"):

    # 打开剪贴板
    w.OpenClipboard()
    # 清空剪贴板
    w.EmptyClipboard()
    # 设置剪贴板内容
    # w.SetClipboardData(win32con.CF_UNICODETEXT, "寿喜锅")
    w.SetClipboardData(win32con.CF_UNICODETEXT, content)
    # 获取剪贴板内容
    date = w.GetClipboardData()
    # 关闭剪贴板
    w.CloseClipboard()


def mykey_press_release():
    # key 1 : 0x31 or 49
    # key 2 : 0x32 or 50
    # key 3 : 0x33 or 51
    # ctrl  : 0x11 or 17
    # alt   : 0x12 or 18

    # 按下ctrl+v
    # win32api.keybd_event(0x11, 0, 0, 0)
    # win32api.keybd_event(0x56, 0, 0, 0)
    # win32api.keybd_event(0x56, 0, win32con.KEYEVENTF_KEYUP, 0)
    # win32api.keybd_event(0x11, 0, win32con.KEYEVENTF_KEYUP, 0)
    # time.sleep(1)
    # # 按下回车
    # win32api.keybd_event(0x0D, 0, 0, 0)
    # win32api.keybd_event(0x0D, 0, win32con.KEYEVENTF_KEYUP, 0)
    win32api.keybd_event(0x11, 0, 0, 0)
    win32api.keybd_event(0x33, 0, 0, 0)
    win32api.keybd_event(0x33, 0, win32con.KEYEVENTF_KEYUP, 0)
    win32api.keybd_event(0x11, 0, win32con.KEYEVENTF_KEYUP, 0)


def mykey_press_release2(keyno: int = 1):
    # key 1 : 0x31 or 49
    # key 2 : 0x32 or 50
    # key 3 : 0x33 or 51
    # ctrl  : 0x11 or 17
    # alt   : 0x12 or 18

    # 按下ctrl+v
    # win32api.keybd_event(0x11, 0, 0, 0)
    # win32api.keybd_event(0x56, 0, 0, 0)
    # win32api.keybd_event(0x56, 0, win32con.KEYEVENTF_KEYUP, 0)
    # win32api.keybd_event(0x11, 0, win32con.KEYEVENTF_KEYUP, 0)
    # time.sleep(1)
    # # 按下回车
    # win32api.keybd_event(0x0D, 0, 0, 0)
    # win32api.keybd_event(0x0D, 0, win32con.KEYEVENTF_KEYUP, 0)
    # win32api.keybd_event(0x11, 0, 0, 0)
    # win32api.keybd_event(0x33, 0, 0, 0)
    # win32api.keybd_event(0x33, 0, win32con.KEYEVENTF_KEYUP, 0)
    # win32api.keybd_event(0x11, 0, win32con.KEYEVENTF_KEYUP, 0)
    match keyno:
        case 1:
            win32api.keybd_event(0x11, 0, 0, 0)
            win32api.keybd_event(0x31, 0, 0, 0)
            win32api.keybd_event(0x31, 0, win32con.KEYEVENTF_KEYUP, 0)
            win32api.keybd_event(0x11, 0, win32con.KEYEVENTF_KEYUP, 0)
        case 2:
            win32api.keybd_event(0x11, 0, 0, 0)
            win32api.keybd_event(0x32, 0, 0, 0)
            win32api.keybd_event(0x32, 0, win32con.KEYEVENTF_KEYUP, 0)
            win32api.keybd_event(0x11, 0, win32con.KEYEVENTF_KEYUP, 0)
        case _:
            print("Something's wrong with the keyno")


# def findwindowfrommouse():
#     time.sleep(4)
#     mykey_press_release()
#     time.sleep(2)
#     phw = win32gui.WindowFromPoint(win32api.GetCursorPos())
#     print('phw', phw)
#     print('hex(phw)', hex(phw))
#     title = win32gui.GetWindowText(phw)
#     print(title)
#     myposition = win32gui.GetWindowRect(phw)
#     print(myposition)

#     # getContentFromClipboared()
#     # # 打开剪贴板
#     # w.OpenClipboard()
#     # # 清空剪贴板
#     # w.EmptyClipboard()
#     # # 设置剪贴板内容
#     # w.SetClipboardData(win32con.CF_UNICODETEXT, "寿喜锅")
#     # # 获取剪贴板内容
#     # date = w.GetClipboardData()
#     # # 关闭剪贴板
#     # w.CloseClipboard()

#     # 显示窗口 (1347, 761) 1394, 764
#     win32gui.ShowWindow(phw, win32con.SW_SHOW)
#     win32api.SetCursorPos([1347, 761])
#     win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 1394, 764, 0, 0)
#     win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 1394, 764, 0, 0)
#     time.sleep(2)

#     for i in range(4):
#         getContentFromClipboared(random.choice(lis1) + ',')
#         # 把剪切板内容粘贴到qq窗口
#         win32gui.SendMessage(phw, win32con.WM_PASTE, 0, 0)
#         # time.sleep(1)
#         # 按下后松开回车键，发送消息
#         win32gui.SendMessage(phw, win32con.WM_KEYDOWN, win32con.VK_RETURN, 0)
#         win32gui.SendMessage(phw, win32con.WM_KEYUP, win32con.VK_RETURN, 0)
#         # time.sleep(1)  # 延缓进程
#         time.sleep(6)


def findwindowfrommouse2(keyno: int = 1, iinterval=20,):
    # time.sleep(4)
    # change window
    mykey_press_release2(keyno)
    time.sleep(4)
    time_count(iinterval)
    phw = win32gui.WindowFromPoint(win32api.GetCursorPos())
    # print('phw', phw)
    # print('hex(phw)', hex(phw))
    # title = win32gui.GetWindowText(phw)
    # print(title)
    # myposition = win32gui.GetWindowRect(phw)
    # print(myposition)
    if 1 == keyno:
        getContentFromClipboared(lis[0])
    elif 2 == keyno:
        getContentFromClipboared(lis[2])
    else:
        print("keyno is wrong now!!!")
    # # 打开剪贴板
    # w.OpenClipboard()
    # # 清空剪贴板
    # w.EmptyClipboard()
    # # 设置剪贴板内容
    # w.SetClipboardData(win32con.CF_UNICODETEXT, "寿喜锅")
    # # 获取剪贴板内容
    # date = w.GetClipboardData()
    # # 关闭剪贴板
    # w.CloseClipboard()

    # 显示窗口 (1347, 761) 1394, 764
    win32gui.ShowWindow(phw, win32con.SW_SHOW)
    win32api.SetCursorPos([1347, 761])
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 1394, 764, 0, 0)
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 1394, 764, 0, 0)
    time.sleep(2)

    # getContentFromClipboared(random.choice(lis1) + ',')
    # 把剪切板内容粘贴到qq窗口
    win32gui.SendMessage(phw, win32con.WM_PASTE, 0, 0)
    time.sleep(1)
    # 按下后松开回车键，发送消息
    win32gui.SendMessage(phw, win32con.WM_KEYDOWN, win32con.VK_RETURN, 0)
    win32gui.SendMessage(phw, win32con.WM_KEYUP, win32con.VK_RETURN, 0)
    time.sleep(1)  # 延缓进程


def producer2(num: int = 20, iinterval: int = 17):
    """producer2 function: 1 product/11 min"""
    # global item

    for i in range(2):
        print("pro-current thread name is %s" %
              threading.current_thread().name)
        # print("wait-4-seconds-producer running No.:[%s]" % item)
        # fun_daka(1, "" , iinterval, '2')
        semaphore.release()
        time.sleep(16)  # time.sleep(23)
        # time.sleep(60 * iinterval)

    for i in range(num):
        time.sleep(2)

        # item = random.randint(0, 100)
        # item += 1
        print("pro-current thread name is %s" %
              threading.current_thread().name)
        # print("wait-4-seconds-producer running No.:[%s]" % item)
        # fun_daka(1, "" , iinterval, '2')
        semaphore.release()
        time.sleep(60 * iinterval)


def consumer2(num: int = 20, iinterval: int = 35, keyno: int = 1):
    """
    consumer function
    """
    # time.sleep(8)
    for i in range(num):
        time.sleep(2)
        print("---wait for producer running---")
        # acquire resouces, semaphore is zero,
        # wait for semaphore be released.
        semaphore.acquire()
        print("cser-current thread name is %s" %
              threading.current_thread().name)
        # print("wait-6-seconds---consumer finish---No.:[%s]" % item)
        # fun_daka2(1, "", iinterval, keynum, word)
        findwindowfrommouse2(keyno, iinterval)
        time.sleep(4)
        time.sleep(60 * iinterval + 4)


def run_semaphore2():
    """"
    one producer, three consumer
    """
    # dict1 = {"num": 40, "iinterval": 20, "keynum": '1', "word": lis[0]}
    # dict2 = {"num": 40, "iinterval": 35, "keynum": '2', "word": lis[2]}
    # dict3 = {"num": 40, "iinterval":35, "keynum": '1'}
    dict1 = {"num": 40, "iinterval": 20, "keyno": 1}
    dict2 = {"num": 40, "iinterval": 35, "keyno": 2}
    t1 = threading.Thread(target=producer2, args=(40, 12,))
    t2 = threading.Thread(target=consumer2, kwargs=dict1)
    t3 = threading.Thread(target=consumer2, kwargs=dict2)
    # t4 = threading.Thread(target=consumer2, kwargs=dict3)

    t1.start()
    t2.start()
    t3.start()
    # t4.start()

    t1.join()
    t2.join()
    t3.join()
    print("---program stoped---")


if __name__ == '__main__':
    # findwindowfrommouse2()
    run_semaphore2()
